var zTool = require("./zTool");
var onlineUserMap = new zTool.SimpleMap();
var historyContent = new zTool.CircleList(100);

var commLib = require("../webconfig");
var EVENT_TYPE = commLib.EVENT_TYPE;
var PORT = commLib.PORT;

//使用socket.io直接启动http服务
var io = require("socket.io").listen(PORT);

io.sockets.on("connection", function (socket) {
    socket.on("message", function (message) {
        var mData = commLib.analyzeMessageData(message);
        if (mData && mData.EVENT) {
            switch (mData.EVENT) {
                case EVENT_TYPE.LOGIN: // 新用户连接
                    //console.log('new user connect....');
                    var newUser = { 'uid': socket.id, 'nick': commLib.getMsgFirstDataValue(mData) };
                    // 把新连接的用户增加到在线用户列表
                    //onlineUserMap.put(socket.id, newUser);
                    // 把新用户的信息广播给在线用户
                    var data = JSON.stringify({
                        'EVENT': 'LOGIN',
                        'values': ['连接成功']
                    });
                    io.sockets.emit('message', data); //广播
                    //socket.emit('message',data);
                    // socket.broadcast.emit('message', data);//无效
                    break;

                case EVENT_TYPE.PIXEL: // 同步画笔
                    var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.PIXEL,
                        'values': [value]
                    });
                    //io.sockets.emit('message', data);
                    socket.broadcast.emit('message', data)
                    break;

                case EVENT_TYPE.SYNC: // 请求同步
                    var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.SYNC,
                        'values': [value]
                    });
                    //io.sockets.emit('message', data);

                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.PAGE: //跳页
                    //var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.PAGE,
                        'values': mData.values
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.CANCELSYNC: // 取消同步
                    var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.CANCELSYNC,
                        'values': [value]
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.SCROLL: // 页面滚动
                    var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.SCROLL,
                        'values': [value]
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.PinchStart:
                    //var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.PinchStart,
                        'values': mData.values
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.Pinch:
                    var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.Pinch,
                        'values': [value]
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.PinchEnd:
                    var value = mData.values[0];
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.PinchEnd,
                        'values': [value]
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.DoubleTap:                    
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.DoubleTap,
                        'values': mData.values
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.PreDraw:
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.PreDraw,
                        'values': mData.values
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.Draw:
                    var data = JSON.stringify({
                        'EVENT': EVENT_TYPE.Draw,
                        'values': mData.values
                    });
                    socket.broadcast.emit('message', data)
                    break;
                case EVENT_TYPE.LOGOUT: // 用户请求退出
                    //                var user = mData.values[0];
                    //                onlineUserMap.remove(user.uid);
                    //                var data = JSON.stringify({
                    //                    'EVENT' : EVENT_TYPE.LOGOUT,
                    //                    'values' : [user]
                    //                });
                    //                io.sockets.emit('message',data);
                    //                break;
                default:
                    break;
            }

        } else {
            // 事件类型出错，记录日志，向当前用户发送错误信息
            console.log('desc:message,userId:' + socket.id + ',message:' + message);
            var data = JSON.stringify({
                'uid': socket.id,
                'EVENT': EVENT_TYPE.ERROR
            });
            socket.emit('message', data);
        }
    });

});

//console.log('Start listening on port ' + PORT);